package com.urbane.search.entity;

import lombok.Data;
import org.dromara.easyes.annotation.*;
import org.dromara.easyes.annotation.rely.Analyzer;
import org.dromara.easyes.annotation.rely.FieldStrategy;
import org.dromara.easyes.annotation.rely.FieldType;

import java.io.Serial;
import java.io.Serializable;
import java.util.Date;

@Data
@IndexName  // 索引名注解，对应 MP 的 @TableName 注解
@Settings(shardsNum = 3, replicasNum = 2)   // 索引 Settings 信息注解,可设置 ES 索引中的 Settings 信息
public class ProductDocument implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * es中的唯一主键
     * ES主键注解，对应 MP的 @TableId 注解
     */
    @IndexId
    private String id;
    /**
     * 文档标题
     * ES字段注解, 对应 MP 的 @TableField 注解
     */
    private String title;

    // 场景一:标记es中不存在的字段
    @IndexField(exist = false)
    private String notExistsField;

    // 场景二:更新时,此字段非空字符串才会被更新
    @IndexField(strategy = FieldStrategy.NOT_EMPTY)
    private String creator;

    // 场景三: 指定fieldData
    @IndexField(fieldType = FieldType.TEXT, fieldData = true)
    private String filedData;

    // 场景四:自定义字段名
    @IndexField("wu-la")
    private String ula;

    // 场景五:支持日期字段在es索引中的format类型
    @IndexField(fieldType = FieldType.DATE, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date gmtCreate;

    /**
     * 场景五:支持日期字段在es索引中的format类型
     * 文档内容,指定了类型及存储/查询分词器
     */
    @HighLight(mappingField = "highlightContent")
    @IndexField(fieldType = FieldType.TEXT, analyzer = Analyzer.IK_SMART, searchAnalyzer = Analyzer.IK_MAX_WORD)
    private String content;

    // 场景七：支持指定字段在es的索引中忽略大小写,以便在term查询时不区分大小写,仅对keyword类型字段生效,es的规则,并非框架限制.
    @IndexField(fieldType = FieldType.KEYWORD, ignoreCase = true)
    private String caseTest;

    // 场景八:支持稠密向量类型 稠密向量类型,dims必须同时指定,非负 最大为2048
    @IndexField(fieldType = FieldType.DENSE_VECTOR, dims = 3)
    private double[] vector;

    // 场景九:支持复制字段,复制当前字段至指定字段,支持将多个字段值复制到同一字段,与原生用法一致
    @IndexField(copyTo = "creator")
    private String copiedField;
}

// Easy-Es 注解包相关类详解，参考 https://www.easy-es.cn/pages/ac41f0/